﻿using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
using Sinacor.Infra.Service.Common;
using Sinacor.Infra.Common.Validation;
using Sinacor.Infra.Common.Exceptions;
using Sinacor.Infra.Service.ExceptionHandling;


namespace Sinacor.Servico.Bovespa.Parametro.BusinessLogic
{
    /// <summary>
    /// Business Logic Parametro
    /// </summary>
    public class Parametro : BaseBusinessLogic
    {
        #region Construtor
        public Parametro()
            : base()
        {

        }
        #endregion
        private const int ERRO_HORARIOINICIONULO = 109076;
        private const int ERRO_REQUESTNULO = 109075;
        private const int ERRO_AGENTECOMPENSACAONAOINFORMADO = 109239;
        private const int ERRO_DIASNAOINFORMADO = 109240;
        
        #region Métodos
        /// <summary>
        /// Método RecuperarIndicadorDigitoCliente
        /// </summary>
        public BusinessEntity.Parametro RecuperarIndicadorDigitoCliente()
        {
            return (new Sinacor.Servico.Bovespa.Parametro.ResourceAccess.Parametro()).RecuperarIndicadorDigitoCliente();
        }

        /// <summary>
        /// Método RecuperarJuntaFracionario
        /// </summary>
        public BusinessEntity.Parametro RecuperarJuntaFracionario()
        {
            return (new Sinacor.Servico.Bovespa.Parametro.ResourceAccess.Parametro()).RecuperarJuntaFracionario();
        }

        /// <summary>
        /// Data    : 18/09/2008
        /// Autor   : Valdenir Vanalli Filho
        /// Obs.    : Método de acesso ao método homônimo da resource access, trazido do módulo Comum
        /// </summary>
        /// <returns></returns>
        public string RecuperarIndicadorTipoLiquidacaoCustodianteAutomatico()
        {
            return new ResourceAccess.Parametro().RecuperarIndicadorTipoLiquidacaoCustodianteAutomatico();
        }

        /// <summary>
        /// Data    : 18/09/2008
        /// Autor   : Valdenir Vanalli Filho
        /// Obs.    : Método criado para disponibilizar o método na ResourceAccess que foi trazido do Modulo Comum
        /// </summary>
        /// <returns></returns>
        public string RecuperarInBloqueio()
        {
            return new ResourceAccess.Parametro().RecuperarInBloqueio();
        }

        /// <summary>
        /// Data    : 18/09/2008
        /// Autor   : Valdenir Vanalli Filho
        /// Obs.    : Método criado para disponibilizar o método na ResourceAccess que foi trazido do Modulo Comum
        /// </summary>
        /// <returns></returns>
        public DateTime RecuperarDataSistemaContasCorrentes()
        {
            return new ResourceAccess.Parametro().RecuperarDataSistemaContasCorrentes();
        }

        /// <summary>
        /// Data    : 18/09/2008
        /// Autor   : Valdenir Vanalli Filho
        /// </summary>
        /// <returns></returns>
        public DateTime RecuperarDataSistemaCustodia()
        {
            return new ResourceAccess.Parametro().RecuperarDataSistemaCustodia();
        }

        /// <summary>
        /// Data    : 18/09/2008
        /// Autor   : Valdenir Vanalli Filho
        /// </summary>
        /// <returns></returns>
        public string RecuperarJuntaFracionario_OLD()
        {
            throw new NotImplementedException();
            //return new ResourceAccess.Parametro().RecuperarJuntaFracionario();
        }

        /// <summary>
        /// Data    : 19/08/2008
        /// Autor   : Valdenir Vanalli Filho
        /// </summary>
        /// <returns></returns>
        public string RecuperarIndicadorVerificacaoSaldoNegociavel()
        {
            return new ResourceAccess.Parametro().RecuperarIndicadorVerificacaoSaldoNegociavel();
        }

        /// <summary>
        /// Data    : 19/08/2008
        /// Autor   : Valdenir Vanalli Filho
        /// </summary>
        /// <returns></returns>
        public string RecuperarIndicadorUtilizacaoCompliance()
        {
            return new ResourceAccess.Parametro().RecuperarIndicadorVerificacaoSaldoNegociavel();
        }

        /// <summary>
        /// Data    : 19/08/2008
        /// Autor   : Valdenir Vanalli Filho
        /// </summary>
        /// <returns></returns>
        public DateTime RecuperarDataSistemaBancoDados()
        {
            return new ResourceAccess.Parametro().RecuperarDataSistemaBancoDados();
        }

        /// <summary>
        /// Data    : 19/08/2008
        /// Autor   : Valdenir Vanalli Filho
        /// </summary>
        /// <returns></returns>
        public string RecuperarIndicadorAtualizacaoQuantidadeOrdemPreBoleto()
        {
            return new ResourceAccess.Parametro().RecuperarIndicadorAtualizacaoQuantidadeOrdemPreBoleto();
        }

        /// <summary>
        /// Data    : 19/08/2008
        /// Autor   : Valdenir Vanalli Filho
        /// </summary>
        /// <returns></returns>
        public int RecuperarAgenteCompensacao()
        {
            return new ResourceAccess.Parametro().RecuperarAgenteCompensacao();
        }

        /// <summary>
        /// Data    : 19/08/2008
        /// Autor   : Valdenir Vanalli Filho
        /// </summary>
        /// <returns></returns>
        public string RecuperarInAgenteCompensacao()
        {
            return new ResourceAccess.Parametro().RecuperarInAgenteCompensacao();
        }

        /// <summary>
        /// Data    : 19/08/2008
        /// Autor   : Valdenir Vanalli Filho
        /// </summary>
        /// <returns></returns>
        public int RecuperarCdAgenteCompensacao()
        {
            return new ResourceAccess.Parametro().RecuperarCdAgenteCompensacao();
        }

        /// <summary>
        /// Data    : 19/08/2008
        /// Autor   : Valdenir Vanalli Filho
        /// </summary>
        /// <returns></returns>
        public string ConsultarTipoMovimento()
        {
            return new ResourceAccess.Parametro().ConsultarTipoMovimento();
        }

        /// <summary>
        /// Data    : 19/08/2008
        /// Autor   : Valdenir Vanalli Filho
        /// </summary>
        /// <returns></returns>
        public string RecuperarInCompliance()
        {
            return new ResourceAccess.Parametro().RecuperarInCompliance();
        }

        /// <summary>
        /// Data    : 19/08/2008
        /// Autor   : Valdenir Vanalli Filho
        /// </summary>
        /// <returns></returns>
        public string RecuperarIndicadorDigitoAberturaOrdem()
        {
            return new ResourceAccess.Parametro().RecuperarIndicadorDigitoAberturaOrdem();
        }

        /// <summary>
        /// Data : 17/04/2007
        /// Autor: Eduardo Sertorio
        /// Obs. : Criacao do metodo para recuperar o parametro (Quantidade de Tempo para Casamento de Ordem) da tabela TORPARMESP - esertorio - 200804171530 - ref issue ID0002947
        /// Cada unidade equivale a aproximadamente 30 segundos.
        /// 
        /// Data    : 19/09/2008
        /// Autor   : Valdenir Vanalli Filho
        /// Obs.    : Transposto do módulo Comum, que será extinto.
        ///           Este método foi trazido do módulo supra referido, porém não foi encontrada,
        ///           no momento da transposição, nenhuma referência a ele.
        /// </summary>
        public int? RecuperarQuantidadeTempoCasamentoOrdem()
        {
            return new ResourceAccess.Parametro().RecuperarQuantidadeTempoCasamentoOrdem();
        }

        /// <summary>
        /// Data : 17/04/2007
        /// Autor: Eduardo Sertorio
        /// Obs. : Criacao do metodo para recuperar o parametro (Quantidade de Tempo para Calculo Financeiro) da tabela TORPARMESP - esertorio - 200804171530 - ref issue ID0002947
        /// Cada unidade equivale a aproximadamente 30 segundos.
        /// 
        /// Data    : 19/09/2008
        /// Autor   : Valdenir Vanalli Filho
        /// Obs.    : Transposto do módulo Comum, que será extinto.
        ///           Este método foi trazido do módulo supra referido, porém não foi encontrada,
        ///           no momento da transposição, nenhuma referência a ele.
        /// </summary>
        public int? RecuperarQuantidadeTempoCalculoFinanceiro()
        {
            return new ResourceAccess.Parametro().RecuperarQuantidadeTempoCalculoFinanceiro();
        }

        /// <summary>
        /// Data    : 19/09/2008
        /// Autor   : Valdenir Vanalli Filho
		/// 
		/// Data: 22/10/2008
		/// Autor: Rodrigo M Scatulin
		/// Motivo: Comentado pq bovespa base não deve existir
        /// </summary>
        /*public List<BovespaBase.Enum.TipoOrdem> RecuperarTipoOrdemPadraoEmpresa()
        {
            return new ResourceAccess.Parametro().RecuperarTipoOrdemPadraoEmpresa();
        }*/
        
        
        /// <summary>
        /// rscatulin
		/// adptação de shelve
        /// </summary>
        /// <returns></returns>
        public string RecuperarIndicadorBloqueio(){
			return new ResourceAccess.Parametro().RecuperarIndicadorBloqueio();
        }
        
        /// <summary>
        /// rscatulin
		/// adptação de shelve
        /// </summary>
        /// <returns></returns>
        public string RecuperarIndicadorAdministradoConcorrente(){
			return new ResourceAccess.Parametro().RecuperarIndicadorAdministradoConcorrente();
        }

        //Task :5435
        //Data :27/02/2009
        //Autor: APsilva
        /// <summary>
        /// Retornar os parametros
        /// </summary>
        /// <returns></returns>
        public BusinessEntity.Parametro ObterParametro()
        {
            return new ResourceAccess.Parametro().ObterParametro(); 
        }

        //Task :5435
        //Data :27/02/2009
        //Autor: APsilva
        /// <summary>
        /// Alterar os Parametros recebidos no banco
        /// </summary>
        /// <param name="request"></param>
        public void AlterarParametro(BusinessEntity.Parametro request)
        {
            if (request == null)
                throw new BusinessException(ERRO_REQUESTNULO);
            
            
            ValidarParametro(request);

            new ResourceAccess.Parametro().AlterarParametro(request); 

        }

        //Task :5435
        //Data :27/02/2009
        //Autor: APsilva
        /// <summary>
        /// Validar os pararametros 
        /// </summary>
        /// <param name="request"></param>

        private void ValidarParametro( BusinessEntity.Parametro request)
        {

            if (request.InicioPregao.ToString("HH:mm") == "24:00" || request.InicioPregao.ToString("HH:mm") == "00:00")
            {
                throw new  BusinessException(ERRO_HORARIOINICIONULO);
            }

            if (!request.AgenteCompensacao)
                request.CodigoAgenteCompensacao = null;
            else
                if(request.CodigoAgenteCompensacao == null)
                    throw new BusinessException(ERRO_AGENTECOMPENSACAONAOINFORMADO);


            if (!request.AposPeriodoCancelamentoOrdens)
                request.DiasCancelamentoOrdens = null;
            else
                if(request.DiasCancelamentoOrdens == null)
                    throw new BusinessException(ERRO_DIASNAOINFORMADO);

            if (!request.NaoExecutadaCancelamentoOrdens)
                request.CodigoMensagem = null; 

        }
        #endregion

    }
}
